package main

/*
	在go语言中：
	  - 布尔类型的零值（初始值）为 `false`
	  - 数值类型的零值为 `0`
	  - 字符串类型的零值为空字符串 `""`

    除此之外其它类型的默认值为`nil`，`nil`可以代表下面这些类型的零值：
	  - `指针类型`（包括`unsafe`中的）
	  - `map`类型
	  - `slice`类型
	  - `function`类型
	  - `channel`类型
	  - `interface`类型
*/

import "fmt"

type Student struct {
	name string
	age  int
}

type Teacher struct {
	name      string
	age       int
	beautiful bool
}

func testA() (stu1 *Student, stu2 *Student, tea1 *Teacher, tea2 Teacher, str string, sli1 interface{}, sli2 interface{}) {
	return
}

func MyNil() {

	stu1, stu2, tea1, tea2, str, sli1, sli2 := testA()

	fmt.Println("stu1: ", stu1)
	fmt.Println("stu2: ", stu2)
	fmt.Println("tea1: ", tea1)
	fmt.Println("tea2: ", tea2)
	fmt.Println("str: ", str)
	fmt.Println("sli1: ", sli1)
	fmt.Println("sli2: ", sli2)
	fmt.Println("stu1 == stu2: ", stu1 == stu2)

	fmt.Println("sli1 == sli2: ", sli1 == sli2) // 两个 interface 可以比较, 因为 interface 本身是 引用类型

	fmt.Println("tea1 == stu1: ", tea1 == nil) // 指针类型 可以和 nil 进行比较

	// fmt.Println("str == nil: ", str == nil)       // 值类型 不能和 nil 进行比较
	// fmt.Println("tea1 == stu1: ", tea1 == stu1)   // 不同指针类型的 nil 不能相互比较

}
